在簡單談完戰略篇後,接下來要進行戰行篇,也就是將 DDD 實際的應用到程式碼中。
在 DDD 戰術層級有兩個非常重要的概念 :
接下來這篇文章要先來談談這東西。
An Entity is an object defined not by its attributes, but a thread of continuity and identity, which spans the life of a system and can extend beyond it.
我自已簡單的理解為 :
它是一個物件,有唯一標識 + 業務行為方法
簡單舉個範例,假設我們有個錢包,而將它寫成 Entity 如下,這就是一個實體 :
class Wallet{
id: string
value: number
addMoney(deposit : number): void{
this.value += deposit
}
subtractMoney(debit: number): void{
if(this.value < debit){
this.value -= debit
}
}
}
那這個是從戰略層級那來的 ? 是我們之前討論的 Domain StoryTelling 下圖的 Work Object 嗎 ? 不 ~ 不是,比較準確的說,那個之後會談的 Aggregate 比較像,而 entity 只是它裡面的某個組成。
與 Entity 的差別在於,沒有唯一標識
舉個例子,例如 Money,它事實上只需要有兩個屬性,一個代表幣別,一個代表值,它不需要有個唯一標識說他是整個系統中唯一的。
class Money{
value: number
currency: string
}
通常會與 entity 這樣一起用
class Wallet{
id: string
value: Money <---------------------- 這裡
addMoney(deposit : number): void{
this.value += deposit
}
subtractMoney(debit: number): void{
if(this.value < debit){
this.value -= debit
}
}
}